﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using VsxFactory.Modeling.VisualStudio;

namespace VsxFactory.Modeling.Strategies
{
    public interface ICodeEditorStrategy : IStrategy
    {
        bool OnDocumentClosed(IVsProjectFileItem node);
        void OnTypeRenamed(string oldFullName, IVsProjectFileItem node);
        void OnTypeAdded(IVsProjectFileItem node, EnvDTE.CodeType type);
        void OnPropertyRemoved(IVsProjectFileItem node, EnvDTE.CodeType type, string memberNameOrSignature);
        void OnPropertyAdded(IVsProjectFileItem node, EnvDTE.CodeType parent, EnvDTE.CodeProperty newProperty);
        void OnNestedTypeAdded(IVsProjectFileItem node, EnvDTE.CodeClass parent, EnvDTE.CodeType newNestedType);
        void OnMethodRenamed(IVsProjectFileItem node, EnvDTE.CodeType type, EnvDTE80.CodeFunction2 method);
        void OnMethodRemoved(IVsProjectFileItem node, EnvDTE.CodeType type, string memberNameOrSignature);
        void OnMethodAdded(IVsProjectFileItem node, EnvDTE.CodeType parent, EnvDTE80.CodeFunction2 newMethod);
        void OnFieldRenamed(IVsProjectFileItem node, EnvDTE.CodeType type, EnvDTE.CodeVariable field);
        void OnFieldRemoved(IVsProjectFileItem node, EnvDTE.CodeType type, string memberNameOrSignature);
        void OnFieldAdded(IVsProjectFileItem node, EnvDTE.CodeType parent, EnvDTE.CodeVariable newField);
        void OnElementPropertiesChanged(IVsProjectFileItem node, EnvDTE.CodeElement element);
        void OnBaseTypeChanged(IVsProjectFileItem node, EnvDTE.CodeType type);
        void OnAttributeRemoved(IVsProjectFileItem node, EnvDTE.CodeElement parent, string attributeName);
        void OnAttributeChanged(IVsProjectFileItem node, EnvDTE80.CodeAttribute2 attribute);
        void OnAttributeAdded(IVsProjectFileItem node, EnvDTE80.CodeAttribute2 attribute);
        void OnParameterRenamed(IVsProjectFileItem node, EnvDTE80.CodeFunction2 method, int parameterIndex, EnvDTE.CodeParameter parameter);
        void OnParameterRemoved(IVsProjectFileItem node, EnvDTE80.CodeFunction2 method, string parameterName);
        void OnParameterAdded(IVsProjectFileItem node, EnvDTE80.CodeFunction2 method, EnvDTE.CodeParameter parameter);
    }
}
